Vue.js x Firebaseの練習ログ
/icons/hr.icon
2020-09-06 22:55:49
projectを作る
23:01:51 できた
https://gyazo.com/c025ea23ec31940278e0000798a22409
23:02:48 /icons/vue.js.iconのprojectを作る
/icons/VSCode.iconから編集する
23:08:52 lintの設定完了
$ vue add vuetify
23:11:38 installに失敗した?
https://gyazo.com/6ddfa27f50a357b348eea1e240b69121
installは出来たけどsettingに失敗したようだ
とりあえずスルー
$ yarn add vuefire@next firebase
$ vim src/plugins/firebase.js
23:28:00 pluginはsrc/main.tsでinstallしないといけないようだ
方法も解説記事と違う
code:main.ts
import { createApp } from "vue";
import App from "./App.vue";
import "./registerServiceWorker";
import router from "./router";
import {firestorePlugin} from 'vuefire';
// install plugins
createApp(App)
.use(router)
.use(firestorePlugin)
.mount("#app");
23:29:16 /icons/firebase.iconのconsoleからAPI情報を取得する
23:37:25 発行し、環境設定ファイルに書き込んだ
23:45:47 deploy出来たが、何も映らない
Vueにprototypeがないとか言っている
00:28:48 なんでダメなのかわからん
pluginがVer.3.0に対応していない……なこたあないか。
2020-09-07 16:04:07
16:12:14 /icons/vue.js.iconの公式documentを読んだほうが早い気がしてきた
最新の記法で書かれている
17:10:47 vuetifyで書かれている部分をnativeに置き換える
<li>に:keyが必要
17:41:00 vuefireなしだと、async/awaitを使わないといけないようだ 17:41:29 FirebaseError: Missing or insufficient permissions.エラーが出た
https://gyazo.com/769e5771523e113f2a19ee6c9b7f718d
code:firebase.rule
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if resource.data.isPublic == true
|| request.auth.uid == resource.data.uid;
allow write: if false;
}
}
}
19:08:03 data()を挟むことでdataを取得できるようになった
動いたcode
code:setup.ts
setup: async () => {
const comments = ref<(firestore.DocumentData | undefined)[]>([]);
// firestoreのcommentsコレクションを参照
await db
.collection('comments')
.orderBy('createdAt')
.get()
.then(querySnapShot =>
querySnapShot.docs
.map(docQuery => docQuery.data())
.forEach(comment => comments.value.push(comment))
);
return { comments };
},
19:21:12 vuetifyが使えないので、/emoji/css.iconをベタ打ちする 19:34:48 いい感じ
https://gyazo.com/a3d90957385ddffc34c475c129ae9394
一旦ここでcommitしておく
21:17:04 少しずつcommitする
21:32:48 commit終了
Bulmaが良さそうなので、Bulmaを/icons/vue.js.iconで使う方法を調べる 21:42:02 導入方法は2つある
今のrepoをそのまま使えるか?
$ yarn add bulma
別のrepoで練習したほうが早そうだ
とりあえずこれでやってみる
21:59:04 凝ったことをしないなら、この方法で十分っぽい
https://gyazo.com/8b1c77a994663385e272cba540fe1395
22:10:34 同じ情報が公式にあった
22:08:50 まとめておいた
22:18:41 app.vueにも適用した
23:04:46 調べる
23:35:24 できた
Bulmaを使うときは、class="modal is-active"にしないと見えない public/index.htmlがあったので、そこにCDNを書き込むことが出来た
全てのcomponentに適用されるので便利
23:49:54 外観はいい感じになった
https://gyazo.com/576568496571447c03033b66005a72f9
23:50:14 textを右寄せにする
https://gyazo.com/4df167ce9d02146a74347c6ddcd9cb50
App.vueにあったtest-alignを消した
comment追加機能を作る
00:17:44 いいかんじになった
https://gyazo.com/94be7f011215d78b0e1e37f3a18850e3
/emoji/warning.iconルールを読み書き自由にしたので、かなり危険な状態
real-time更新はまだ実装できていない
00:23:23 一旦commitする
00:28:59 commit終了
real-time更新の実装に挑戦する
01:20:26 real-time更新は成功。ただしidの情報が取得できていないことに気づいたので、そこだけ直す
01:35:48 commentを表現するinterfaceとmake函数を作って対処した
01:36:48 2つwindowを並べて、同期でされているか確認する
01:37:55 確認終了。同期的出来ていた!
一旦commit
/icons/done.icon01:39:53 した
色々修正
<input>に文字が残らないようにする
/icons/done.icon01:43:26 完了
cancelなど、投稿するbuttonを押したとき以外は、windowが閉じても入力内容が保持される事がわかった
便利takker.icon
Enterキーで投稿する
01:45:19 @keyup.enter="<該当するevent handler>"を<input>に入れれば出来るっぽい
01:49:38 出来たー
comment削除機能を入れる
編集機能も入れたいな
まあこれは後で
01:52:14 一旦トイレ
01:54:27 戻ってきた
02:09:42 うまくいっていない
onSnapShotから帰ってくる型が、addedのときとremovedのときとで違う?
02:16:28 実装完了
少し前から、機能を実装するごとにcommitするようにしている
02:10:32 addedのときは、初期状態も含めて返却されるようだ
重要: 最初のクエリ スナップショットには、クエリに一致する既存のすべてのドキュメントの added イベントが含まれています。これは、クエリの初期状態に対してクエリ スナップショットが最新の状態になるように、一連の変更を取得しているためです。たとえば、最初のクエリ スナップショットで受け取った変更から、初期状態を処理する特別なロジックを追加する必要なく、UI を直接入力できます。
なので初期設定用処理を削除する
一体何だったんだ……takker.icon
02:16:57 deployしてみるか
その前に、認証をどうにかしないと
02:41:56 認証について調べるがよくわからん
参考になりそうなサイト
queryについて
微妙かも
ぶっちゃけ、認証とか考えるのが面倒すぎる
ランダムなhash値を使ってアクセスするとか出来ないかな?
02:58:12 色々出来るみたい
https://gyazo.com/5dfdb93115839c57706a95f0719a1819
03:06:15 IMEの入力確定のEnterでも投稿されてしまっていたので、それを直した
とりあえずこのrepoは認証考えなくていいや。
個人情報ないし別にええやろtakker.icon
04:13:51 deployする
04:31:45 完了
04:32:14 /icons2/smartphone.iconから接続してみる
04:36:01 できた!
04:37:14 commitしておく
04:49:11 終了
04:42:52 developer toolから/icons/javascript.iconファイルを確認すれば、API keyなどがわかってしまうようだ やはりアカウント認証するしかないか
もしくはドメインをハッシュ値にする
05:03:04 一旦終了
これ以降は、どういうweb appを自分が作りたいのか考える必要があるtakker.icon
2020-11-20 10:11:08 このrepo, remoteにpushしていなかったみたい
codeがわからないや